// Copyright©,2020-2025
// Author: caocheng
// Version: 1.0.0
// Date: 2021/3/2 11:15
// Description：
package SummerCore

import (
	"context"
)

type GoFunc func()

//
// ApplicationContext：加载属性配置
//
type ApplicationContext interface {

	// 属性值列表接口
	Properties

	// Context 返回上下文接口
	Context() context.Context

	// GetProfile 返回运行环境
	GetProfile() string

	// SetProfile 设置运行环境
	SetProfile(profile string)

	// Close 关闭容器上下文，用于通知销毁等。
	Close(beforeDestroy ...func())

	AutoConfig()

	// Run 根据条件判断是否立即执行一个一次性的任务
	Run(fn interface{}, tags ...string) *Runner

	// RunNow 立即执行一个一次性的任务
	RunNow(fn interface{}, tags ...string) error

	// Config 注册一个配置函数
	Config(fn interface{}, tags ...string) *Configer

	// ConfigWithName 注册一个配置函数，名称的作用是对 Config 进行排重和排顺序。
	ConfigWithName(name string, fn interface{}, tags ...string) *Configer

	// SafeGoroutine 安全地启动一个 goroutine
	SafeGoroutine(fn GoFunc)
}
